package com.itheima.d5_polymorphic.demo3;

//目标：了解多态的好处和弊端
public class Demo {
    public static void main(String[] args) {
        /**
         * 优势：提高方法的扩展性
         *
         * 劣势：多态下不能使用子类的特有功能
         *
         * 需求：利用多态技术优化feedDog和feedCat方法，使两个方法变为一个方法！
         */
        //1.多态语法允许：父类引用指向子类对象（接口引用指向实现类对象！）

        //2.定义一个feedAnimal方法，形参就声明为Dog和Cat的父类类型

        //3.尝试调用方法，传入Dog和Cat对象
        feedAnimal(new Dog()); //参数传递之后，相当于：Animal animal = new Dog();
        feedAnimal(new Cat()); //参数传递之后，相当于：Animal animal = new Cat();

        //4.多态的好处：确实可以提高一个方法接收参数的扩展性！
    }

    //喂养动物
    public static void feedAnimal(Animal animal) {
        animal.eat();

        //弊端：多态应用下，父类引用不能使用子类特有功能
        //animal.lookHome();
        //animal.catchMouse();
    }

    //喂养狗
    public static void feedDog(Dog dog) {
        dog.eat();
    }

    //喂养猫
    public static void feedCat(Cat cat) {
        cat.eat();
    }
}
